package sixth.对象转型;
/*
对于向上转型 程序会自动会自动完成 而对于向下转型 要指定要转型的子类型
 */
class A2 {
    public void fun1() {
        System.out.println("A---fun1()");
    }

    public void fun2() {
        System.out.println("A---fun2()");
    }
}

class B2 extends A2 {
    public void fun1() {
        System.out.println("B---fun1()");
    }

    public void fun3() {
        System.out.println("B---fun3()");
    }
}

class C2 extends A2 {
    public void fun1() {
        System.out.println("C---fun1()");
    }

    public void fun4() {
        System.out.println("C---fun4()");
    }
}

public class 使用对象多态性实现此功能 {
    public static void fun(A2 a) {// 接受A类对象
        a.fun1();
    }

    public static void main(String[] args) {
        fun(new B2());
        fun(new C2());
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=53029:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 sixth.对象转型.使用对象多态性实现此功能
B---fun1()
C---fun1()

Process finished with exit code 0
 */
/**
 * 上面的程序由于在fun()方法中使用了对象的多态性，所以可以接受任何的子类对象
 * 这样 不管子类如何增加 则fun()方法都不用做任何的改变，因为一旦发生对象的向上转型关系之后
 * 调用的方法肯定是被子类覆写过的方法
 */